
// ASUI.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "ASUI.h"
#include "ASUIDlg.h"
#include "IReadingInformation.h"
#include "ReadingInformation.h"
#include "DummyReadingInformation.h"
#include "GraphTestReadingInformation.h"
#include "ISensorReader.h"
#include "SensorReader.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CASUIApp

BEGIN_MESSAGE_MAP(CASUIApp, CWinApp)
	ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// CASUIApp construction

CASUIApp::CASUIApp()
{
	// support Restart Manager
	m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;

	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
}


// The one and only CASUIApp object

CASUIApp theApp;


// CASUIApp initialization

BOOL CASUIApp::InitInstance()
{
	// InitCommonControlsEx() is required on Windows XP if an application
	// manifest specifies use of ComCtl32.dll version 6 or later to enable
	// visual styles.  Otherwise, any window creation will fail.
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// Set this to include all the common control classes you want to use
	// in your application.
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();


	AfxEnableControlContainer();

	// Create the shell manager, in case the dialog contains
	// any shell tree view or shell list view controls.
	CShellManager *pShellManager = new CShellManager;

	// Standard initialization
	// If you are not using these features and wish to reduce the size
	// of your final executable, you should remove from the following
	// the specific initialization routines you do not need
	// Change the registry key under which our settings are stored
	// TODO: You should modify this string to be something appropriate
	// such as the name of your company or organization
	SetRegistryKey(_T("Local AppWizard-Generated Applications"));
	
	unique_ptr<Sensor::IReadingInformation> readingInformation;
	unique_ptr<Sensor::ISensorReader> sensorReader;

	try {
		if (__argc == 3 && strcmp(__argv[1], "-fakesensors") == 0) {
			readingInformation.reset(new Sensor::GraphTestReadingInformation(atoi(__argv[2])));
		} else {
			sensorReader.reset(new Sensor::SensorReader());
			readingInformation.reset(new Sensor::ReadingInformation());
			sensorReader->addListener(readingInformation.get());
			sensorReader->start();
		}

		CASUIDlg dlg;
		dlg.setReadingInformation(readingInformation.get());
		m_pMainWnd = &dlg;
		INT_PTR nResponse = dlg.DoModal();
	} catch (std::exception e) {
		AfxMessageBox(e.what(), MB_ICONEXCLAMATION);
	}

	// Delete the shell manager created above.
	if (pShellManager != NULL) {
		delete pShellManager;
	}

	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return FALSE;
}

